package middleware

import (
	"context"
	"errors"
	"github.com/smallnest/rpcx/protocol"
	"strings"
)

const (
	tokenStr   = "12321321321321"
	adminToken = "asdadsadsad"
)

// Auth rpcx中间件，用于校验token
// *****************************************************************
// 需检测token是否为空，是否有效, 具体方法可见test 包内的rpcx_test.go
// *****************************************************************
func Auth() func(ctx context.Context, req *protocol.Message, token string) error {
	return func(ctx context.Context, req *protocol.Message, token string) error {
		if token == "" {
			return errors.New("missing token")
		}
		if !validateToken(token) {
			return errors.New("invalid token")
		}
		// 服务/方法级别权限控制
		if strings.HasPrefix(req.ServicePath, "Admin") && !isAdmin(token) {
			return errors.New("permission denied")
		}
		return nil
	}
}

// token校验逻辑
func validateToken(token string) bool {
	return token == tokenStr
}

// admin 校验逻辑
func isAdmin(token string) bool {
	return token == adminToken
}
